import type {NodeItem} from '../type'
/**
 * 获取折叠节点数量
 * @param node - 当前节点
 * @param treeData - 树形数据数组
 * @returns 被折叠的子节点数量
 */
const getCollapsedNodeCount = (node: any, treeData: any[]) => {
  // 用于跟踪已经计算过的节点，避免重复计算
  const countedNodes = new Set<string>();
  
  /**
   * 递归计算所有子节点数量
   * @param nodeId - 节点ID
   */
  const countChildren = (nodeId: string) => {
    // 如果节点已经计算过，直接返回
    if (countedNodes.has(nodeId)) {
      return;
    }
    
    // 标记节点为已计算
    countedNodes.add(nodeId);
    
    const node = treeData.find(n => n.nodeId === nodeId);
    if (!node) return;
    
    // 递归计算子节点
    if (node.nextIds && node.nextIds.length > 0) {
      node.nextIds.forEach((childId: string) => {
        countChildren(childId);
      });
    }
  };
  
  // 计算所有子节点数量
  if (node.nextIds && node.nextIds.length > 0) {
    node.nextIds.forEach((childId: string) => {
      countChildren(childId);
    });
  }
  
  return countedNodes.size;
};

export {
  getCollapsedNodeCount,
};